//封装axios用的
import axios from 'axios'
import router from '@/router'
//process.env.NODE_ENV用来获取当前环境
//开发环境：development         npm run dev
//生产环境：production          npm run build
//测试环境：production          npm run build
const isDev = process.env.NODE_ENV == 'development'

//开发阶段会使用服务器地址使用公司后端程序员电脑的ip地址
//在生产环境和测试环境将地址写为远程服务器地址

//baseURL:isDev?'开发环境使用后端ip地址':'生产环境使用远程服务器地址'
const request = axios.create({
    baseURL: isDev ? 'http://121.89.205.189:3000/admin' : 'http://121.89.205.189:3000/admin',
    //配置请求超时时间
    timeout: 60000
})
// 添加请求拦截器
request.interceptors.request.use(function (config) {
    // 在发送请求之前做些什么
    //所有数据请求在发送前执行函数
   //在发送数据请求之前添加token
    const admin =localStorage.getItem('userInfo')
    config.headers.token=admin ===null|undefined?'':JSON.parse(admin).token
    // console.log(config); 

    return config;
  }, function (error) {
    // 对请求错误做些什么
    return Promise.reject(error);
  });

// 添加响应拦截器
request.interceptors.response.use(function (response) {
    // 2xx 范围内的状态码都会触发该函数。
    // 对响应数据做点什么
    //所有数据请求在响应前执行函数
    if(response.data.code=='10119'){
        //将所有本地存储的内容清空
        localStorage.clear()
        router.push('/login')
    }
    return response.data;
  }, function (error) {
    // 超出 2xx 范围的状态码都会触发该函数。
    // 对响应错误做点什么
    return Promise.reject(error);
  });

//自定义各种请求方法
export default function ajax(config) {
    const { url = '', method = 'get', data = {}, headers = {} } = config
    switch (method.toUpperCase()) {
        case 'GET':
            return request.get(url, { params: data })
        case 'POST':
            //表单提交
            if(headers['content-type']=='application/x-www-from-url-encoded'){
                //将数据序列化
                const obj =new URLSearchParams()
                for(const key in data ){
                    obj.append(key,data[key])
                }
                return request.post(url,obj,{headers})
            }

            //文件提交
            if(headers['content-type']=='multipart/form-data'){
                const obj =new FormData()
                for(const key in data ){
                    obj.append(key,data[key])
                }
                return request.post(url,obj,{headers})
            }
            //json数据提交
            return request.post(url,data)

        case 'DELETE':
            //删除数据
            return request.delete(url,{data })
        case 'PUT':
            //修改数据
            return request.put(url,data)
        case 'PATCH':
            //更新局部资源
            return request.patch(url,data)
        default:
            //如果上面都没有匹配
            return request.request(config)
    }
}